package com.bytedance.danmaku.render.engine.demo.danmu

import android.graphics.Bitmap
import com.bytedance.danmaku.render.engine.DanmakuView
import com.bytedance.danmaku.render.engine.control.DanmakuConfig
import com.bytedance.danmaku.render.engine.control.DanmakuConfig.ScrollLayerConfig
import com.bytedance.danmaku.render.engine.data.DanmakuData
import com.bytedance.danmaku.render.engine.demo.utils.dp
import com.bytedance.danmaku.render.engine.render.draw.IDrawItemFactory
import com.bytedance.danmaku.render.engine.touch.IItemClickListener

/**
 * Created by Yanxin on 2025/9/1
 * 弹幕功能接口
 */
interface IDanmakuView {
    /**
     * 初始化弹幕View
     * @param danmakuView 弹幕View
     */
    fun init(danmakuView: DanmakuView)

    /**
     * 弹幕View是否显示
     * @return true 显示 false 不显示
     */
    fun isShowDanmakuView(): Boolean

    /**
     * 显示弹幕View
     */
    fun showDanmakuView()

    /**
     * 隐藏弹幕View
     */
    fun hideDanmakuView()

    /**
     * 设置弹幕数据
     * @param danmakuList 弹幕数据列表
     */
    fun setData(danmakuList: List<DanmakuData>)

    /**
     * 获取弹幕配置
     * @return 弹幕配置
     */
    fun getDanmakuConfig(): DanmakuConfig?

    /**
     * 获取弹幕滚动行配置
     * @return 弹幕滚动行配置
     */
    fun getDanmakuStroll(): ScrollLayerConfig?

    /**
     * 开始播放弹幕
     */
    fun start()

    /**
     * 暂停弹幕
     */
    fun pause()

    /**
     * 恢复弹幕
     */
    fun resume(currentTime: Long = 0L)

    /**
     * 停止弹幕
     */
    fun stop()

    /**
     * 添加一条弹幕
     * @param item 弹幕项
     */
    fun addDanmaku(item: DanmakuData)

    /**
     * 更新弹幕View
     */
    fun updateDanmakuView()

    /**
     * 指定时间显示弹幕
     * @param playTime 播放时间
     */
    fun seekTo(playTime: Long)

    /**
     * 设置弹幕点击监听
     * @param listener 点击监听器
     */
    fun setOnDanmakuClickListener(listener: IItemClickListener)

    /**
     * 设置弹幕透明度
     * @param alpha 透明度 (1.0为正常透明度)
     */
    fun setAlpha(alpha: Float)

    /**
     * 设置弹幕行数
     * @param lineCount 行数
     */
    fun setLineCount(lineCount: Int)

    /**
     * 发送顶部弹幕
     * @param item 弹幕项
     */
    fun sendTopDanmakuData(item: DanmakuData)

    /**
     * 发送底部弹幕
     * @param item 弹幕项
     */
    fun sendBottomDanmakuData(item: DanmakuData)

    /**
     * 发送图片弹幕
     * @param bitmapWidth 图片宽度
     * @param bitmapHeight 图片高度
     * @param resource 图片资源
     */
    fun sendBitmapDanmakuData(
        bitmapWidth: Float = 50.dp,
        bitmapHeight: Float = 50.dp,
        resource: Bitmap,
    )

    /**
     * 注册弹幕绘制项工厂
     * @param factory 绘制项工厂
     */
    fun registerDrawItemFactory(factory: IDrawItemFactory)

    /**
     * 设置弹幕字体大小
     * @param textSize 字体大小
     */
    fun setTextSize(textSize: Float)

    /**
     * 设置弹幕速度
     * @param speed 速度 (1.0为正常速度)
     */
    fun setSpeed(speed: Float)

    /**
     * 清除所有弹幕
     */
    fun clear()

    /**
     * 释放资源
     */
    fun release()
}